package com.dragon.modules.yuegou.model.rbac;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;

import javax.annotation.Nullable;

/**
 * 角色
 * 
 * @author liuwu
 *
 */
public class RbacRole {
	
	/**
	 * 管理员角色的角色标识
	 */
	public static final String ADMIN_KEY = "ADMIN";

	/**
	 * 角色ID
	 */
	private final String id;

	/**
	 * 角色标识，系统角色一定有标识，用户自定义角色不一定有，角色标识只在相应权限组中唯一，在整个系统中不唯一
	 */
	@Nullable
	private final String key;

	/**
	 * 角色名称
	 */
	private final String name;

	/**
	 * 角色描述
	 */
	private final String description;

	/**
	 * 是否是系统角色
	 */
	private final boolean system;

	@JsonCreator
	public RbacRole(@JsonProperty("id") String id, @Nullable @JsonProperty("key") String key,
			@JsonProperty("name") String name, @JsonProperty("description") String description,
			@JsonProperty("system") boolean system) {
		super();
		this.id = id;
		this.key = key;
		this.name = name;
		this.description = description;
		this.system = system;
	}

	/**
	 * 获取角色ID
	 * 
	 * @return 角色ID
	 */
	public String getId() {
		return id;
	}

	/**
	 * 获取角色标识，系统角色一定有标识，用户自定义角色不一定有，角色标识只在相应权限组中唯一，在整个系统中不唯一
	 * 
	 * @return 角色标识
	 */
	@Nullable
	public String getKey() {
		return key;
	}

	/**
	 * 获取角色名称
	 */
	public String getName() {
		return name;
	}

	/**
	 * 获取角色描述
	 * 
	 * @return 角色描述
	 */
	public String getDescription() {
		return description;
	}

	/**
	 * 判断是否是系统角色
	 * 
	 * @return true表示是系统角色；false表示是用户自定义角色；
	 */
	public boolean isSystem() {
		return system;
	}

	@Override
	public String toString() {
		StringBuilder builder = new StringBuilder();
		builder.append("RbacRole [id=");
		builder.append(id);
		builder.append(", key=");
		builder.append(key);
		builder.append(", name=");
		builder.append(name);
		builder.append(", description=");
		builder.append(description);
		builder.append(", system=");
		builder.append(system);
		builder.append("]");
		return builder.toString();
	}

}
